package com.app.shop.util;

import com.app.shop.entity.SysMenu;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 系统常量
 * @author chenliwei
 */
public class LoginUtil {

    /**
     * 登陆限制，5次失败必须使用管理员账号重置密码
     * 后面改redis
     */
    public static final Map<String,Integer> loginMap=new HashMap<String, Integer>();

    /**
     * token限制，保证账号登陆唯一,token超时时间8小时
     * 后面改redis
     */
    public static final Map<String,String> tokenMap=new HashMap<String, String>();

    /**
     * token限制，保证账号登陆唯一,token超时时间8小时
     * 后面改redis
     */
    public static final Map<Integer,List<SysMenu>> menuList=new HashMap<Integer, List<SysMenu>>();

    /**
     * 判断当前用户对应token是否有效
     * @param username
     * @param token
     * @return 如果当前用户
     */
    public static boolean getTokenStatus(String username,String token){

        if(username==null||token==null){
            return false;
        }
        //后面改redis实现
        //LoginUtil.tokenMap.get(username).equals(token);
        return  true;
    }

    /**
     * 记录当前用户最后登陆的token，失效所有其他token
     * @param username
     * @param token
     */
    public static void putUserToken(String username,String token){
        tokenMap.put(username,token);
    }

    /**
     * 清除用户登陆记录
     * @param username
     */
    public static void removeLoginCnt(String username){
        loginMap.remove(username);
    }

    /**
     * 用户登陆失败进行记录
     * @param username
     * @return
     */
    public static  synchronized void loginFail(String username){
        if(loginMap.containsKey(username)){
            loginMap.put(username,loginMap.get(username)+1);
        }else{
            loginMap.put(username,1);
        }
    }

    /**
     * 判断用户是否可以进行登陆,集群必须使用redis
     * @param username
     */
    public static  synchronized boolean loginFilter(String username){
//        if(loginMap.containsKey(username)){
//            if(loginMap.get(username)>5){
//                return false;
//            }
//        }
        return true;
    }

    /**
     * 记录用户登陆菜单列表
     * @param userId
     * @param sysMenuList
     * @return
     */
    public static synchronized void putMenuList(Integer userId,List<SysMenu> sysMenuList){
        menuList.put(userId,sysMenuList);
    }

    /**
     * 获取用户ID对应菜单信息
     * @param userId
     * @return
     */
    public static synchronized List<SysMenu> getMenuList(Integer userId){
        return menuList.get(userId);
    }
}
